package it.gestionedocumentale.struts.action.admin.utente;

import java.util.List;

import it.gestionedocumentale.model.Gruppo;
import it.gestionedocumentale.model.Utente;
import it.gestionedocumentale.spring.service.MyServiceFactory;
import it.gestionedocumentale.struts.form.UtenteForm;

import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;

import org.apache.commons.logging.Log;
import org.apache.commons.logging.LogFactory;
import org.apache.struts.action.ActionForm;
import org.apache.struts.action.ActionForward;
import org.apache.struts.action.ActionMapping;
import org.apache.struts.actions.DispatchAction;


public class ConfermaCRUDUtenteAction extends DispatchAction {
	private static Log log = LogFactory.getLog(ConfermaCRUDUtenteAction.class);
	
	
	@Override
	protected ActionForward dispatchMethod(ActionMapping mapping, ActionForm form,
			HttpServletRequest request, HttpServletResponse response, String arg4)
			throws Exception {
		
		Utente utenteSession = (Utente) request.getSession().getAttribute("utenteSession");
		
		if(utenteSession == null) {
			return mapping.findForward("notInSession");
		}
		if(!utenteSession.getGruppo().getCodGruppo().equals("ADMIN")) {
			return mapping.findForward("notAllowed");
		}
		
		return super.dispatchMethod(mapping, form, request, response, arg4);
	}
	
	
	// ********************* INSERISCI *********************
	
	public ActionForward insert(ActionMapping mapping, ActionForm form,
			HttpServletRequest request, HttpServletResponse response)
			throws Exception {
		
		UtenteForm utenteFormExample = (UtenteForm) request.getSession().getAttribute("utenteFormExample");
		UtenteForm utenteForm = (UtenteForm) form;
		List<Utente> listaUtenti = null;
		
		try {
			Utente utenteDaCercare = new Utente();
			utenteDaCercare.setLogin(utenteForm.getLogin());
			List<Utente> lista = MyServiceFactory.getUtenteService().findByExample(utenteDaCercare);
			if(lista != null && lista.size() > 0) {
				List<Gruppo> listaGruppi = MyServiceFactory.getGruppoService().findAll();
				request.setAttribute("listaGruppi", listaGruppi);
				request.setAttribute("message", "LOGIN esistente - inserirne una alternativa<br>");
				return mapping.findForward("insertUtenteForm");
			}
			
			MyServiceFactory.getUtenteService().inserisciNuovoUtente(utenteForm);
			if (utenteFormExample!=null) {
				listaUtenti = MyServiceFactory.getUtenteService().cercaUtente(utenteFormExample);
			} 
			else {
				listaUtenti = MyServiceFactory.getUtenteService().findAll();
			}
		} catch (Exception e) {
			e.printStackTrace();
			log.error(e);
			return mapping.findForward("error");
		}
			
		request.setAttribute("message", "Nuovo utente inserito con successo!");
		request.setAttribute("listaUtenti", listaUtenti);
		
		return mapping.findForward("listaUtenti");
		
	}
	
	public ActionForward modifica (ActionMapping mapping, ActionForm form,
			HttpServletRequest request, HttpServletResponse response)
			throws Exception {
		
		UtenteForm utenteFormExample = (UtenteForm) request.getSession().getAttribute("utenteFormExample");
		UtenteForm utenteForm = (UtenteForm) form;
		List<Utente> listaUtenti = null;
		
		try {
			if (!(MyServiceFactory.getUtenteService().controllaLoginUtente(utenteForm))) {
				List<Gruppo> listaGruppi = MyServiceFactory.getGruppoService().findAll();
				request.setAttribute("listaGruppi", listaGruppi);
				request.setAttribute("message", "LOGIN esistente - inserirne una alternativa<br>");
				return mapping.findForward("modificaUtenteForm");
			}
			MyServiceFactory.getUtenteService().update(utenteForm);
			if (utenteFormExample!=null) {
				listaUtenti = MyServiceFactory.getUtenteService().cercaUtente(utenteFormExample);
			} 
			else {
				listaUtenti = MyServiceFactory.getUtenteService().findAll();
			}
		} 
		catch (Exception e) {
			e.printStackTrace();
			log.error(e);
			return mapping.findForward("error");
		}
		
		
		request.setAttribute("listaUtenti", listaUtenti);
		request.setAttribute("message", "Utente modificato con successo!");
		return mapping.findForward("listaUtenti");

	}
	
	public ActionForward cancella (ActionMapping mapping, ActionForm form,
			HttpServletRequest request, HttpServletResponse response)
			throws Exception {
		
		UtenteForm utenteFormExample = (UtenteForm) request.getSession().getAttribute("utenteFormExample");
		UtenteForm utenteForm = (UtenteForm) form;
		List<Utente> listaUtenti = null;
		
		try {
			MyServiceFactory.getUtenteService().cancellazioneLogica(utenteForm.getIdUtente());
			if (utenteFormExample!=null) {
				listaUtenti = MyServiceFactory.getUtenteService().cercaUtente(utenteFormExample);
			} 
			else {
				listaUtenti = MyServiceFactory.getUtenteService().findAll();
			}

		} catch (Exception e) {
			e.printStackTrace();
			log.error(e);
			return mapping.findForward("error");
		}
		
		request.setAttribute("listaUtenti", listaUtenti);
		request.setAttribute("message", "Utente cancellato con successo");
		
		return mapping.findForward("listaUtenti");
		
	}

}
